<template>
  <!-- <div>这是详情页面 = {{ $route.params.id }}</div> -->
  <div>
    <div v-if="detailData">
      <div>这是详情页面</div>
      <p>{{ detailData.nm }}</p>
      <img :src="detailData.img | formatUrl" alt="" />
      <button @click="guess">猜你喜欢</button>
    </div>
    <!-- <div v-else>loading...</div> -->
  </div>
</template>

<script>
import { mapState, mapActions } from "vuex";

export default {
  props: ["id"],

  computed: {
    ...mapState({
      detailData: (state) => state.detail.detailData,
    }),
  },

  filters: {
    formatUrl(val) {
      return val.split("/w.h").join("/200.300");
    },
  },

  mounted() {
    this.getDetailAsync({ id: this.id });
  },

  methods: {
    ...mapActions("detail", ["getDetailAsync"]),
    guess() {
      this.$router.push("/detail/1282401");
    },
  },

  // 页面内守卫
  // 路由给我们提供的生命周期
  // async beforeRouteEnter(to, from, next) {
  //   // console.log("beforeRouteEnter", this);
  //   // 在渲染该组件的对应路由被 confirm 前调用
  //   // 不！能！获取组件实例 `this`
  //   // 因为当守卫执行前，组件实例还没被创建
  //   const res = await detailApi({ id: to.params.id });
  //   // console.log(res);
  //   next((vm) => (vm.detailData = res.result));
  // },
  // async beforeRouteUpdate(to, from, next) {
  //   // 在当前路由改变，但是该组件被复用时调用
  //   // 举例来说，对于一个带有动态参数的路径 /foo/:id，在 /foo/1 和 /foo/2 之间跳转的时候，
  //   // 由于会渲染同样的 Foo 组件，因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
  //   // 可以访问组件实例 `this`
  //   // console.log("beforeRouteUpdate");
  //   const res = await detailApi({ id: to.params.id });
  //   this.detailData = res.result;
  //   next();
  // },
  // beforeRouteLeave(to, from, next) {
  //   // 导航离开该组件的对应路由时调用
  //   // 可以访问组件实例 `this`
  //   next();
  // },
};
</script>

<style></style>
